package com.sailing.xjpb.dict.service;


import com.sailing.xjpb.dict.entity.bo.DictionaryBO;

import java.util.List;

/**
 * 枚举公共服务API-为各服务间提供枚举查询、翻译等功能
 *
 * @author YaoWei
 */
public interface DictionaryService {

    /**
     * 按照字典字典类型查找字典子类集合，带缓存。
     *
     * @param type 枚举类型
     */
    List<DictionaryBO> queryByType(String type);

    /**
     * 根据枚举类型和枚举code查询枚举信息
     *
     * @param type 枚举类型
     * @param code 枚举code
     */
    DictionaryBO queryByTypeAndCode(String type, String code);

    /**
     * 根据枚举类型和枚举code查询枚举信息
     *
     * @param type 枚举类型
     * @param name 枚举name
     */
    DictionaryBO queryByTypeAndName(String type, String name);

    /**
     * 根据标签类型和标签位置查询枚举信息
     *
     * @param labelType     标签类型
     * @param labelLocation 标签位置
     */
    DictionaryBO queryByLabelTypeAndLabelLocation(String labelType, String labelLocation);

    /**
     * 根据枚举类型和枚举code查询枚举信息
     *
     * @param id 枚举主键ID
     */
    DictionaryBO queryById(String id);

    /**
     * 根据上级ID查询所有枚举信息
     *
     * @param pId 上级ID
     */
    List<DictionaryBO> queryByPId(String pId);

    /**
     * 根据上级ID和字典类型查询所有枚举信息
     *
     * @param type 字典类型
     * @param pId  上级ID
     */
    List<DictionaryBO> queryByTypeAndPId(String type, String pId);

    /**
     * 递归获取当前编码下面所有的数据
     *
     * @param type:
     * @param pId:
     * @param dictionaryBOList:
     * @author 薛峰
     * createDate: 2021/7/5 12:48
     * <p>
     * editDescription:
     * editUser: 薛峰
     * editDate: 2021/7/5 12:48
     */
    void recursionQueryByTypeAndPId(String type, String pId, List<DictionaryBO> dictionaryBOList);

    /**
     * 根据字典code 和 type 返回 code 对应的name值
     *
     * @param code 枚举code
     * @param type 枚举类型
     * @return String
     */
    String translateData(String code, String type);

}
